package com.lagou.common.util;

import org.springframework.util.DigestUtils;

import java.sql.Timestamp;
import java.text.MessageFormat;
import java.util.Random;
import java.util.UUID;

public class CommonUtils {

    /**
     * 返回md5加密后的字符串
     *
     * @param str 需要被加密的字符串
     * @return md5加密后的字符串
     */
    public static String toMd5(String str) {
        return DigestUtils.md5DigestAsHex(nullToBlank(str).getBytes());
    }

    /**
     * 将null转换为空字符串
     *
     * @param str 需要被转换的字符串
     * @return 返回转换后的字符串
     */
    public static String nullToBlank(String str) {
        if (str == null) {
            return "";
        } else {
            return str;
        }
    }

    /**
     * 随机生成指定位数的数字编码
     *
     * @param length 指定位数
     * @return 随机编码
     */
    public static String generateNumberCode(int length) {

        char[] baseNumber = "0123456789".toCharArray();

        Random random = new Random();
        StringBuffer code = new StringBuffer();

        for (int i = 0; i < length; i++) {
            code.append(baseNumber[random.nextInt(baseNumber.length)]);
        }

        return code.toString();
    }

    /**
     * 格式化message
     *
     * @param message 需要被格式化的message
     * @param param   填入的参数
     * @return 格式化后的message
     */
    public static String messageFormat(String message, Object... param) {
        return MessageFormat.format(message, param);
    }

    /**
     * 返回当前时间的时间戳
     *
     * @return 当前时间的时间戳
     */
    public static Timestamp now() {
        return new Timestamp(System.currentTimeMillis());
    }

    /**
     * 返回过期时间的时间戳
     *
     * @param from    起始时间
     * @param timeout 超时时间
     * @return 过期时间的时间戳
     */
    public static Timestamp expiresTime(Timestamp from, Long timeout) {
        return new Timestamp(from.getTime() + timeout);
    }

    /**
     * 生成token
     *
     * @param email    邮箱
     * @param password 密码
     * @return token
     */
    public static String generateToken(String email, String password) {
        return UUID.randomUUID().toString();
    }

    /**
     * 判断是否是空字符串
     *
     * @param str    字符串
     * @return 是否是空字符串
     */
    public static boolean isBlank(String str) {
        return str == null || "".equals(str.trim()) || "null".equals(str.trim());
    }

    public static boolean isNotBlank(String str) {
        return !isBlank(str);
    }
}
